package br.unipar.blog.view.action.usuario;

import br.unipar.blog.view.action.AbstractUniparAction;
import br.unipar.blog.controller.cadastrousuario.CadastroUsuarioBuilder;
import br.unipar.blog.controller.cadastrousuario.CadastroUsuarioFactory;
import br.unipar.blog.controller.cadastrousuario.CadastroUsuarioVo;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.springframework.beans.factory.annotation.Autowired;

public class CadastroUsuarioAction extends AbstractUniparAction {
    
    @Autowired
    private CadastroUsuarioBuilder cadastroUsuarioBuilder;
    
    @Autowired
    private CadastroUsuarioFactory cadastroUsuarioFactory;
    
    private CadastroUsuarioVo vo = createVo();

    public CadastroUsuarioVo getVo() {
        return vo;
    }

    public void setVo(CadastroUsuarioVo vo) {
        this.vo = vo;
    }

    private CadastroUsuarioVo createVo() {
        return new CadastroUsuarioVo();
    }
    
    public void limpar() {
        vo = createVo();
    }
    
    public void salvar() {

        boolean valido = true;
        
        if (!vo.getEmail().equals(vo.getConfirmacaoEmail())) {
            FacesContext.getCurrentInstance()
                    .addMessage("confirmacaoEmail", 
                    new FacesMessage("Confirmaçao de email inválida"));
            valido = false;
        }
        
        if (!vo.getSenha().equals(vo.getConfirmacaoSenha())) {
            FacesContext.getCurrentInstance()
                    .addMessage("confirmacaoSenha", 
                    new FacesMessage("Confirmaçao de senha inválida"));
            valido = false;
        }
        
        if (!valido) {
            return;
        }
        
        try {
            cadastroUsuarioBuilder.build(vo);
            vo = createVo();
            setMensagem("Cadastro realizado com sucesso!!!");
        } catch (IllegalArgumentException e) {
            setMensagem(e.getMessage());
        }
    }
    
    public void editar(ActionEvent event) {
        CadastroUsuarioVo vo = 
                (CadastroUsuarioVo)event.getComponent()
                .getAttributes().get("usuario");
        this.vo = vo;
    }
    
    private List<CadastroUsuarioVo> usuarioList = new ArrayList<CadastroUsuarioVo>();

    public List<CadastroUsuarioVo> getUsuarioList() {
        return usuarioList;
    }
    
    private String filtro = "";

    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }
    
    public void filtrar() {
        usuarioList = cadastroUsuarioFactory.buscarParcialPeloEmailOuNome(filtro);
    }

}
